﻿<?xml version="1.0" encoding="utf-8"?>
<xsd:schema id="SalamancaDomainModelLanguageSchema" targetNamespace="http://schemas.microsoft.com/dsltools/SalamancaDomainModelLanguage" elementFormDefault="qualified" xmlns="http://schemas.microsoft.com/dsltools/SalamancaDomainModelLanguage" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- NamedElement -->
  <xsd:element name="namedElement" abstract="true" type="NamedElement" />
  <xsd:complexType name="NamedElement" abstract="true" >
    <!-- Property: Name -->
    <xsd:attribute name="name" type="xsd:string" use="required" />
  </xsd:complexType>
  
  <!-- NamedElement Moniker -->
  <xsd:element name="namedElementMoniker" abstract="true" type="NamedElementMoniker" />
  <xsd:complexType name="NamedElementMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for NamedElement instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="name" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- DomainModel -->
  <xsd:element name="domainModel" type="DomainModel" substitutionGroup="namedElement" />
  <xsd:complexType name="DomainModel">
    <xsd:complexContent>
      <xsd:extension base="NamedElement">
        <xsd:sequence minOccurs="0" maxOccurs="1">
          <!-- Relationship: DomainModelHasComments -->
          <xsd:element name="comments" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of DomainModelHasComments</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="unbounded" >
                  <xsd:element ref="domainModelHasComments">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from DomainModelHasComments needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="comment" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
          <!-- Relationship: DomainModelHasElements -->
          <xsd:element name="elements" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of DomainModelHasElements</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="unbounded" >
                  <xsd:element ref="domainModelHasElements">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from DomainModelHasElements needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="domainElement" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
        <!-- dslVersion -->
        <xsd:attribute name="dslVersion" type="xsd:string">
          <xsd:annotation>
            <xsd:documentation>Version of the model serialized in this file.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: Namespace -->
        <xsd:attribute name="namespace" type="xsd:string" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DomainModel Moniker -->
  <xsd:element name="domainModelMoniker" type="DomainModelMoniker" substitutionGroup="namedElementMoniker" />
  <xsd:complexType name="DomainModelMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DomainModel instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="NamedElementMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DomainEntity -->
  <xsd:element name="domainEntity" type="DomainEntity" substitutionGroup="domainElement" />
  <xsd:complexType name="DomainEntity">
    <xsd:complexContent>
      <xsd:extension base="DomainElement">
        <xsd:sequence minOccurs="0" maxOccurs="1">
          <!-- Relationship: EntityHasAttributes -->
          <xsd:element name="attributes" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of EntityHasAttributes</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="unbounded" >
                  <xsd:element ref="entityHasAttributes">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from EntityHasAttributes needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="entityAttribute" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
          <!-- Relationship: Generalization -->
          <xsd:element name="subEntities" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of Generalization</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="unbounded" >
                  <xsd:element ref="generalization">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from Generalization needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="domainEntityMoniker" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
          <!-- Relationship: Association -->
          <xsd:element name="targets" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of Association</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element ref="association" minOccurs="0" maxOccurs="unbounded">
                  <xsd:annotation>
                    <xsd:documentation>[Instance of Association needs to be serialized in full-form]</xsd:documentation>
                  </xsd:annotation>
                </xsd:element>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
        <!-- Property: InheritanceModifier -->
        <xsd:attribute name="inheritanceModifier" type="InheritanceModifier" />
        <!-- Property: PluralName -->
        <xsd:attribute name="pluralName" type="xsd:string" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DomainEntity Moniker -->
  <xsd:element name="domainEntityMoniker" type="DomainEntityMoniker" substitutionGroup="domainElementMoniker" />
  <xsd:complexType name="DomainEntityMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DomainEntity instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DomainElementMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- EntityAttribute -->
  <xsd:element name="entityAttribute" type="EntityAttribute" substitutionGroup="domainModelElement" />
  <xsd:complexType name="EntityAttribute">
    <xsd:annotation>
      <xsd:documentation>An attribute of a Domain Entity.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DomainModelElement">
        <!-- Property: Type -->
        <xsd:attribute name="type" type="xsd:string" />
        <!-- Property: InitialValue -->
        <xsd:attribute name="initialValue" type="xsd:string" />
        <!-- Property: AllowNull -->
        <xsd:attribute name="allowNull" type="xsd:boolean" />
        <!-- Property: MaxLength -->
        <xsd:attribute name="maxLength" type="xsd:integer" />
        <!-- Property: Unique -->
        <xsd:attribute name="unique" type="xsd:boolean" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- EntityAttribute Moniker -->
  <xsd:element name="entityAttributeMoniker" type="EntityAttributeMoniker" substitutionGroup="domainModelElementMoniker" />
  <xsd:complexType name="EntityAttributeMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for EntityAttribute instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DomainModelElementMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Comment -->
  <xsd:element name="comment" type="Comment" />
  <xsd:complexType name="Comment">
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Relationship: CommentReferencesSubjects -->
      <xsd:element name="subjects" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of CommentReferencesSubjects</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="commentReferencesSubjects">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from CommentReferencesSubjects needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="domainElementMoniker" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Text -->
    <xsd:attribute name="text" type="xsd:string" />
  </xsd:complexType>
  
  <!-- Comment Moniker -->
  <xsd:element name="commentMoniker" type="CommentMoniker" />
  <xsd:complexType name="CommentMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Comment instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="Id" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- MultipleAssociation -->
  <xsd:element name="multipleAssociation" type="MultipleAssociation" substitutionGroup="domainElement" />
  <xsd:complexType name="MultipleAssociation">
    <xsd:complexContent>
      <xsd:extension base="DomainElement">
        <xsd:sequence minOccurs="0" maxOccurs="1">
          <!-- Relationship: MultipleAssociationRole -->
          <xsd:element name="types" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of MultipleAssociationRole</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element ref="multipleAssociationRole" minOccurs="0" maxOccurs="unbounded">
                  <xsd:annotation>
                    <xsd:documentation>[Instance of MultipleAssociationRole needs to be serialized in full-form]</xsd:documentation>
                  </xsd:annotation>
                </xsd:element>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
          <!-- Relationship: AssociationEntityRelationship -->
          <xsd:element name="associationClass" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instance of AssociationEntityRelationship</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="1" >
                  <xsd:element ref="associationEntityRelationship">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from AssociationEntityRelationship needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="domainEntityMoniker" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- MultipleAssociation Moniker -->
  <xsd:element name="multipleAssociationMoniker" type="MultipleAssociationMoniker" substitutionGroup="domainElementMoniker" />
  <xsd:complexType name="MultipleAssociationMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for MultipleAssociation instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DomainElementMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DomainElement -->
  <xsd:element name="domainElement" abstract="true" type="DomainElement" substitutionGroup="domainModelElement" />
  <xsd:complexType name="DomainElement" abstract="true" >
    <xsd:complexContent>
      <xsd:extension base="DomainModelElement">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DomainElement Moniker -->
  <xsd:element name="domainElementMoniker" abstract="true" type="DomainElementMoniker" substitutionGroup="domainModelElementMoniker" />
  <xsd:complexType name="DomainElementMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DomainElement instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DomainModelElementMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DomainModelElement -->
  <xsd:element name="domainModelElement" abstract="true" type="DomainModelElement" substitutionGroup="namedElement" />
  <xsd:complexType name="DomainModelElement" abstract="true" >
    <xsd:annotation>
      <xsd:documentation>Element with a Description</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="NamedElement">
        <!-- Property: Description -->
        <xsd:attribute name="description" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>This is a Description.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DomainModelElement Moniker -->
  <xsd:element name="domainModelElementMoniker" abstract="true" type="DomainModelElementMoniker" substitutionGroup="namedElementMoniker" />
  <xsd:complexType name="DomainModelElementMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DomainModelElement instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="NamedElementMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DomainEnum -->
  <xsd:element name="domainEnum" type="DomainEnum" substitutionGroup="domainElement" />
  <xsd:complexType name="DomainEnum">
    <xsd:complexContent>
      <xsd:extension base="DomainElement">
        <xsd:sequence minOccurs="0" maxOccurs="1">
          <!-- Relationship: DomainEnumHasValues -->
          <xsd:element name="values" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of DomainEnumHasValues</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="1" maxOccurs="unbounded" >
                  <xsd:element ref="domainEnumHasValues">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from DomainEnumHasValues needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="enumValue" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
        <!-- Property: UnderlyingType -->
        <xsd:attribute name="underlyingType" type="xsd:string" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DomainEnum Moniker -->
  <xsd:element name="domainEnumMoniker" type="DomainEnumMoniker" substitutionGroup="domainElementMoniker" />
  <xsd:complexType name="DomainEnumMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DomainEnum instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DomainElementMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- EnumValue -->
  <xsd:element name="enumValue" type="EnumValue" substitutionGroup="domainModelElement" />
  <xsd:complexType name="EnumValue">
    <xsd:complexContent>
      <xsd:extension base="DomainModelElement">
        <!-- Property: UnderlyingValue -->
        <xsd:attribute name="underlyingValue" type="xsd:string" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- EnumValue Moniker -->
  <xsd:element name="enumValueMoniker" type="EnumValueMoniker" substitutionGroup="domainModelElementMoniker" />
  <xsd:complexType name="EnumValueMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for EnumValue instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DomainModelElementMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Association -->
  <xsd:element name="association" type="Association" />
  <xsd:complexType name="Association">
    <xsd:annotation>
      <xsd:documentation>Associations between Classes.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DomainEntity -->
      <xsd:element ref="domainEntityMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: SourceMultiplicity -->
    <xsd:attribute name="sourceMultiplicity" type="Multiplicity" />
    <!-- Property: SourceRoleName -->
    <xsd:attribute name="sourceRoleName" type="xsd:string" />
    <!-- Property: TargetMultiplicity -->
    <xsd:attribute name="targetMultiplicity" type="Multiplicity" />
    <!-- Property: TargetRoleName -->
    <xsd:attribute name="targetRoleName" type="xsd:string" />
    <!-- Property: Form -->
    <xsd:attribute name="form" type="AssociationForm" />
  </xsd:complexType>
  
  <!-- Association Moniker -->
  <xsd:element name="associationMoniker" type="AssociationMoniker" />
  <xsd:complexType name="AssociationMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Association instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="Id" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- EntityHasAttributes -->
  <xsd:element name="entityHasAttributes" abstract="true" type="EntityHasAttributes" />
  <xsd:complexType name="EntityHasAttributes" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end EntityAttribute -->
      <xsd:element ref="entityAttribute" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- EntityHasAttributes Moniker -->
  <xsd:element name="entityHasAttributesMoniker" abstract="true" type="EntityHasAttributesMoniker" />
  <xsd:complexType name="EntityHasAttributesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for EntityHasAttributes instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- DomainModelHasComments -->
  <xsd:element name="domainModelHasComments" abstract="true" type="DomainModelHasComments" />
  <xsd:complexType name="DomainModelHasComments" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Comment -->
      <xsd:element ref="comment" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- DomainModelHasComments Moniker -->
  <xsd:element name="domainModelHasCommentsMoniker" abstract="true" type="DomainModelHasCommentsMoniker" />
  <xsd:complexType name="DomainModelHasCommentsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DomainModelHasComments instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- Generalization -->
  <xsd:element name="generalization" abstract="true" type="Generalization" />
  <xsd:complexType name="Generalization" abstract="true" >
    <xsd:annotation>
      <xsd:documentation>Inheritance between Classes.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DomainEntity -->
      <xsd:element ref="domainEntityMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- Generalization Moniker -->
  <xsd:element name="generalizationMoniker" abstract="true" type="GeneralizationMoniker" />
  <xsd:complexType name="GeneralizationMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Generalization instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- MultipleAssociationRole -->
  <xsd:element name="multipleAssociationRole" type="MultipleAssociationRole" />
  <xsd:complexType name="MultipleAssociationRole">
    <xsd:annotation>
      <xsd:documentation>Links a MultipleAssociation to one of the classes it associates.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DomainEntity -->
      <xsd:element ref="domainEntityMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
    <!-- Property: Multiplicity -->
    <xsd:attribute name="multiplicity" type="Multiplicity" />
    <!-- Property: RoleName -->
    <xsd:attribute name="roleName" type="xsd:string" />
  </xsd:complexType>
  
  <!-- MultipleAssociationRole Moniker -->
  <xsd:element name="multipleAssociationRoleMoniker" abstract="true" type="MultipleAssociationRoleMoniker" />
  <xsd:complexType name="MultipleAssociationRoleMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for MultipleAssociationRole instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- AssociationEntityRelationship -->
  <xsd:element name="associationEntityRelationship" abstract="true" type="AssociationEntityRelationship" />
  <xsd:complexType name="AssociationEntityRelationship" abstract="true" >
    <xsd:annotation>
      <xsd:documentation>Identifies a MultipleAssociation with a Domain Entity, so that it can have attributes.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DomainEntity -->
      <xsd:element ref="domainEntityMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- AssociationEntityRelationship Moniker -->
  <xsd:element name="associationEntityRelationshipMoniker" abstract="true" type="AssociationEntityRelationshipMoniker" />
  <xsd:complexType name="AssociationEntityRelationshipMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for AssociationEntityRelationship instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- DomainModelHasElements -->
  <xsd:element name="domainModelHasElements" abstract="true" type="DomainModelHasElements" />
  <xsd:complexType name="DomainModelHasElements" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DomainElement -->
      <xsd:element ref="domainElement" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- DomainModelHasElements Moniker -->
  <xsd:element name="domainModelHasElementsMoniker" abstract="true" type="DomainModelHasElementsMoniker" />
  <xsd:complexType name="DomainModelHasElementsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DomainModelHasElements instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- CommentReferencesSubjects -->
  <xsd:element name="commentReferencesSubjects" abstract="true" type="CommentReferencesSubjects" />
  <xsd:complexType name="CommentReferencesSubjects" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DomainElement -->
      <xsd:element ref="domainElementMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- CommentReferencesSubjects Moniker -->
  <xsd:element name="commentReferencesSubjectsMoniker" abstract="true" type="CommentReferencesSubjectsMoniker" />
  <xsd:complexType name="CommentReferencesSubjectsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for CommentReferencesSubjects instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- DomainEnumHasValues -->
  <xsd:element name="domainEnumHasValues" abstract="true" type="DomainEnumHasValues" />
  <xsd:complexType name="DomainEnumHasValues" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end EnumValue -->
      <xsd:element ref="enumValue" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- DomainEnumHasValues Moniker -->
  <xsd:element name="domainEnumHasValuesMoniker" abstract="true" type="DomainEnumHasValuesMoniker" />
  <xsd:complexType name="DomainEnumHasValuesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DomainEnumHasValues instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- Enum AccessModifier -->
  <xsd:simpleType name="AccessModifier">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Public"/>
      <xsd:enumeration value="Assembly"/>
      <xsd:enumeration value="Private"/>
      <xsd:enumeration value="Family"/>
      <xsd:enumeration value="FamilyOrAssembly"/>
      <xsd:enumeration value="FamilyAndAssembly"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Enum TypeAccessModifier -->
  <xsd:simpleType name="TypeAccessModifier">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Public"/>
      <xsd:enumeration value="Private"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Enum InheritanceModifier -->
  <xsd:simpleType name="InheritanceModifier">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="None"/>
      <xsd:enumeration value="Abstract"/>
      <xsd:enumeration value="Sealed"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Enum Multiplicity -->
  <xsd:simpleType name="Multiplicity">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="ZeroMany">
        <xsd:annotation>
          <xsd:documentation>*</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="One">
        <xsd:annotation>
          <xsd:documentation>1</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="ZeroOne">
        <xsd:annotation>
          <xsd:documentation>0..1</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="OneMany">
        <xsd:annotation>
          <xsd:documentation>1..*</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Enum AssociationForm -->
  <xsd:simpleType name="AssociationForm">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="UniDirectional"/>
      <xsd:enumeration value="BiDirectional"/>
      <xsd:enumeration value="Aggregation"/>
      <xsd:enumeration value="Composition"/>
    </xsd:restriction>
  </xsd:simpleType>
  
</xsd:schema>

